package com.gxa.xiaoucomeshome.service;

import com.gxa.xiaoucomeshome.exception.BusinessException;
import com.gxa.xiaoucomeshome.pojo.*;
import com.gxa.xiaoucomeshome.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface AdminService {
    /**
     *
     * @param admin_phone
     * @param admin_pwd
     * @return
     * @throws BusinessException
     */
    Admin login(String admin_phone, String admin_pwd) throws BusinessException;

    /**
     * 展示首页数据
     * @return
     * @throws BusinessException
     */
    InfoVo showInfo() throws BusinessException;

    /**
     * 添加用户协议
     * @param agree_desc
     * @return
     */
    void userAgree(String agree_desc) throws BusinessException;

    /**
     * 名字模糊分页查询门店
     * @param page
     * @param size
     * @param site_name
     * @return
     */
    List<Site> selectSites(Integer page, Integer size, String site_name);

    /**
     * 查询站点数量
     * @param site_name
     * @return
     */
    int selectSitesCount(String site_name);
    /**
     * 站点批量删除
     * @param site_id
     * @return
     */
    int deleteSite(String[] site_id);

    /**
     * 站点单个删除
     * @param site_id
     * @return
     */
    int deleteSiteById(Integer site_id);

    /**
     * 根据编号查询站点
     * @param site_id
     * @return
     */
    Site selectSiteById(Integer site_id);

    /**
     * 添加站点
     * @param site
     */
    void addSite(Site site);

    /**
     * 添加站员
     * @param manager
     */
    void addManager(Manager manager);

    /**
     * 查询所有的地址
     * @return
     */
    List<SiteAddress> selectAddress();

    /**
     * 配送员模糊查询分页
     * @param page
     * @param size
     * @param phone
     * @return
     */
    List<Courier> selectCourier(Integer page, Integer size, String phone,Integer state);

    /**
     * 配送员的数量
     * @param phone
     * @param state
     * @return
     */
    Integer selectCourierCount(String phone, Integer state);

    /**
     * 修改站点信息
     * @param site
     */
    void editSite(Site site);

    /**
     *查询站员信息分页
     * @param page
     * @param size
     * @param phone
     * @return
     */
    List<Manager> selectManager(Integer page, Integer size, String phone);

    /**
     * 站员数量
     * @param phone
     * @return
     */
    Integer selectManagerCount(String phone);

    /**
     * 编辑站员信息
     * @param manager
     */
    void editManager(Manager manager);

    /**
     * 站员批量删除
     * @param mgr_id
     * @return
     */
    int deleteManager(String[] mgr_id);

    /**
     * 根据编号删除站员
     * @param mgr_id
     * @return
     */
    int deleteManagerById(Integer mgr_id);

    /**
     * 查询所有交通工具
     * @return
     */
    List<Courier> selectVehicle();

    /**
     * 添加配送员
     * @param phone
     * @param password
     * @param coname
     * @param gender
     * @param age
     * @param vehicle
     * @param drivingPermit
     * @param idCard
     * @param drivingLicense
     * @param source
     */
    int addCourice(String phone, String password, String coname, String gender, Integer age,
                    String vehicle, String drivingPermit, String idCard, String drivingLicense, String source);

    /**
     * 查询所有门店名
     * @return
     */
    List<Site> selectSiteName();

    /**
     * 配送员批量删除
     * @param phone
     * @return
     */
    int courierDelete(String[] phone);

    /**
     * 修改配送员信息
     * @param phone
     * @param password
     * @param coname
     * @param gender
     * @param age
     * @param vehicle
     * @param drivingPermit
     * @param idCard
     * @param drivingLicense
     * @param source
     */
    void editCourier(String newPhone, String password, String coname, String gender, String age, String vehicle, String drivingPermit, String idCard, String drivingLicense, String source,String phone);

    /**
     * 配送员批量冻结
     * @param phone
     * @return
     */
    int freezeCourier(String[] phone);
    /**
     * 配送员批量解冻
     * @param phone
     * @return
     */
    int thawCourier(String[] phone);

    /**
     * 根据编号查询管理员密码
     * @param adminId
     * @return
     */
    String selectPwdById(Integer adminId);

    /**
     * 根据编号修改管理员密码
     * @param adminId
     * @param newPassword
     * @return
     */
    int updatePwd(Integer adminId, String newPassword);

    /**
     * 根据编号查询站员
     * @param mgr_id
     * @return
     */
    ManagerVo selectManagerById(Integer mgr_id);

    /**
     * 根据电话查询配送员
     * @param phone
     * @return
     */
    Courier selectCourierByPhone(String phone);

    /**
     * 查询父类商品
     * @return
     */
    List<Commodity> selectCommodity();

    /**
     * 查询父类商品下面所有的子类
     * @param id
     * @return
     */
    List<GoodsChild> goodsChildList(Integer page,Integer size,Integer id,String goods_child_name);

    /**
     * 查询商品数量
     * @param id
     * @param goods_child_name
     * @return
     */
    Integer selectGoodsChildCount(int id, String goods_child_name);

    /**
     * 修改父类商品信息
     * @param commodity_name
     * @return
     */
    int updateGoods(String commodity_name,Integer id);

    /**
     * 根据电话删除配送员
     * @param phone
     * @return
     */
    int courierDeleteByPhone(String phone);

    /**
     * 根据电话冻结配送员
     * @param phone
     * @return
     */
    int freezeCourierByPhone(String phone);

    /**
     * 根据电话对配送员解冻
     * @param phone
     * @return
     */
    int thawCourierByPhone(String phone);

    /**
     * 修改子类信息
     * @param goods_child_name
     * @param goods_child_id
     * @return
     */
    int updateGoodsChild(String goods_child_name, Integer goods_child_id,Integer goods_id);

    /**
     * 删除子类商品
     * @param goods_child_id
     * @return
     */
    int deleteGoodsChild(Integer goods_child_id);

    /**
     * 添加父类对象
     * @param commodity_name
     * @return
     */
    int addGoods(String commodity_name);

    /**
     * 添加子类对象
     * @param goods_child_name
     * @param goods_id
     * @return
     */
    int addGoodsChild(String goods_child_name, Integer goods_id);


    /**
     * 查询角色
     * @param page
     * @param size
     * @param role_name
     * @return
     */
    List<Role> selectRole(Integer page,
                          Integer size,
                          String role_name);
    //角色总数
    Integer selectRoleCount(String role_name);
    /**
     * 根据id删除角色
     * @param role_id
     * @return
     */
    int deleteRole(Integer role_id);


    /**
     * 修改角色
     * @param role_name
     * @param role_desc
     * @param role_id
     * @return
     */
    int updateRole(String role_name,
                   String role_desc,
                   Integer role_id);

    /**
     * 查询所有菜单
     * @return
     */
    List<Menu> selectMenu();

    /**
     * 添加角色
     */
    void addRole(RoleVo roleVo);

    /**
     * 查询操作员
     * @param page
     * @return
     */
    List<AdminRoleVo> selectAdminRole(Integer page,
                                      Integer size,
                                      String manage,
                                      Integer role_id);

    //所有操作员
    Integer selectAdminRoleCount(
            String manage,
            Integer role_id);

    /**
     * 新增操作员
     */
    void addAdminRole(AdminRoleVo roleVo);

    /**
     * 删除操作员
     * @return
     */
    int deleteAdminRole(Integer admin_id);



    /**
     * 修改操作员
     * @return
     */
    int updateAdminRole(@Param("admin_phone")String admin_phone,
                        @Param("admin_name")String admin_name,
                        @Param("role_id")Integer role_id,
                        @Param("admin_id")Integer admin_id);

    /**
     * 重置密码
     * @param admin_id
     * @return
     */
    int updatePasswordAdmin(Integer admin_id);
}
